perm filename PEN.MF[1,3] blob sn#484012 filedate 1979-11-18 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00067 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00006 00002	% The instructions for using this file are in PEN0.MF.
C00007 00003
C00013 00004	"b" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00015 00005	"c" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00016 00006	"d" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00017 00007	"e" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00018 00008	"f"  call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00020 00009	"g" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00021 00010	"h" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00022 00011	"i" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00023 00012	"j" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00024 00013	"k" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00026 00014	"l" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00027 00015	"m" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00029 00016	"n" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00031 00017	"o" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00032 00018	"p" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00033 00019	"q" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00034 00020	"r" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00035 00021	"s" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00036 00022	"t" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00037 00023	"u" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00038 00024	"v" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00039 00025	"w" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00041 00026	"x" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00043 00027	"y" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00045 00028	"z" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00047 00029	"." call charbegin(`., 0, rt1rt1 0, 0, 0)
C00048 00030	"," call charbegin(`,, 0, penwidth ppp, 1/2 depth, 0)
C00049 00031	"'" call charbegin(`', 0, penwidth ppp - space, 1/2 depth, mid)
C00050 00032	"" call charbegin(`, 0, penwidth ppp - space, 1/2 depth, mid)
C00051 00033	"!" call charbegin(`!, 0, 0, 0, tp)
C00052 00034	"∞: lightning !"
C00053 00035	"-"
C00054 00036	":" call charbegin(`:, 0, rt1rt1 0, 0, mid)
C00055 00037	% reset the circle so that it corresponds to the upper-case O.
C00056 00038	"C"
C00059 00039	"O"
C00060 00040	"Q"
C00061 00041	"G"
C00062 00042	% italic S
C00063 00043	"D"
C00064 00044	"A"
C00066 00045	"H"
C00068 00046	"V"
C00069 00047	"N"
C00070 00048	"T" 
C00071 00049	"X"
C00072 00050	"Y"
C00073 00051	"Z" call circle(1,2,3,4,5,6,7,8,9,10,11,12)
C00075 00052	"U"
C00076 00053	"M"
C00077 00054	"W"
C00078 00055	"I"
C00079 00056	% The remaining capital letters require two circles, each half-size,
C00082 00057	"B" 
C00083 00058	"P"
C00084 00059	"R"
C00085 00060	"E"
C00086 00061	"F"
C00087 00062	"L"
C00088 00063	"K"
C00090 00064	"J"
C00091 00065	"?" call topcircle(1,2,3,4,5,6,7,8,9,10,11,12)
C00092 00066	% roman S
C00093 00067	end
C00098 ENDMK
C⊗;
% The instructions for using this file are in PEN0.MF.

call setcircle(left, right, mid, base). % Set up circle for lower-case letters.

% kerns

if (mode-font)*(mode-crs)=0:

lig `b: `o: `p: `v kern -space/6, `w kern -space/6, `c: `x: `t: `v: `w:
	 `d kern -space/6, `g kern -space/6, `e kern -space/6,
	 `o kern -space/6, `q kern -space/6, `a kern -space/6;

fi;

"a"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

if style = italic:
	x30=x4; y30=sharp[y4,y2];	% middle right;
	x20=x4; y20=base+srad;		% lower right;
	call charbegin(`a,x9,x4,0,y30);
	draw 30{0,1}..12{-1,0}..10{-tenx,-teny}..9{0,-1}..8{twox,twoy}..
		6{1,0}..4{tenx,teny};
	draw 30..20;
	call `a lserif(20,0,-1,base,penangle);
   else:
	x30=x4; y30=sharp[y4,y2];	% middle right;
	x20=x4; y20=base+srad;		% lower right;
	call charbegin(`a,x8,x4,0,y30);
	x21=x6; y21=1/2[y6,y12]=y22; x22=x4;
	draw 10{tenx,teny}..12{1,0}..30{0,-1}..20;
	draw 4{-tenx,-teny}..6{-1,0}..8{0,1}..21{1,0}..22;
	call `a lserif(20,0,-1,base,penangle);
   fi.
"b"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`b,x10,x3,depth,y3+icx);
x20=x10; y20=tp-srad;		% top
x90=x8; y90= sharp[y10,y8];	% low left
draw 10{tenx,teny}..12{1,0}..2{twox,twoy}..3{0,-1}..4{-tenx,-teny}..
	6{-1,0}..90{0,1}..20;
call `a lserif(20,0,1,tp,penangle).

"c"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`c,x9,x4,0,y2);
x20=x4; y20=1/2[y2,mid];	% top right
x21=x4; y21=1/2[y4,base];	% bottom right
draw 20{-twox,-twoy/2}..12{-1,0}..10{-tenx,-teny}..9{0,-1}..8{twox,twoy}..
	6{1,0}..21{tenx,teny/2}.
"d"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`d,x9,x4,0,tp);
x20=x21=x4; y20=tp-srad; y21=base+srad;
draw 2{-twox,-twoy}..12{-1,0}..10{-tenx,-teny}..9{0,-1}..
	8{twox,twoy}..6{1,0}..4{tenx,teny};
draw 20..21;
call lserif(20,0,1,tp,penangle);
call lserif(21,0,-1,base,penangle).
"e"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`e,x9,x4,0,y2);
x20=x4; y20=1/2[base,y4];
x21=x6; y21=y9;
draw 9{1,0}..2{0,1}..12{-1,0}..10{-tenx,-teny}..9{0,-1}..
	8{twox,twoy}..6{1,0}..20{tenx,teny/2}.
"f";  call circle(1,2,3,4,5,6,7,8,9,10,11,12);

if style=italic:
	call charbegin(`f,x9,x12,depth,tp);
	x100=x10; x120=x12; x20=x2;
	y100=sharp[y8,y10]+(tp-mid);
	y120-y12= y20-y2=tp-mid;
	x40=x8; y40 = sharp[y2,y4] + bt - base;
	x40-x60=x4-x6; y60=bt;
	x60-x80=x6-x8; y80-bt=y8-base;
	% use 50 and 51 for the crossbar;
	y50=y51=mid; rt1x50=x9; rt1x51=x2;
	draw 20{-twox,-twoy}..120{-1,0}..100{0,-1}..40{0,-1}..60{-1,0}
		..80{-twox,-twoy};
	draw 50..51;

   else:
	call charbegin(`f,x9,x12,0,tp);
	x100=x10; x120=x12; x20=x2;
	y100=sharp[y8,y10]+tp-mid;
	y120-y12= y20-y2=tp-mid;
	% use 50 and 51 for the crossbar;
	y50=y51=mid; rt1rt1x50=x9; rt1rt1x51=x2;
	x52=x8; y52=base;
	draw 20{-twox,-twoy}..120{-1,0}..100{0,-1}..52;
	draw 50..51;
	call rfoot(52);
   fi.
"g"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`g,x9,x4,depth,y2);
x30=x4; y30=sharp[y4,y2];
x40=x4; x60=x6; x80=x8;
y40 = sharp[y2,y4]+bt-base;
y6-y60= y8-y80=base-bt;
draw 4{-tenx,-teny}..6{-1,0}..8{-twox,-twoy}..9{0,1}
	..10{tenx,teny}..12{1,0}..30{0,-1}..40{0,-1}..60{-1,0}..80{-twox,-twoy}.
"h"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`h,x8,x4,0,y2);
x30=x4; y30=sharp[y4,y2];
y20=tp-srad; x20=x10;
y21=base+srad; x21=x10;
y22=base+srad; x22=x4;
draw 20..21;
draw 10{tenx,teny}..12{1,0}..30{0,-1}..22;
call lserif(20,0,1,tp,penangle);
call lserif(21,0,-1,base,penangle);
call lserif(22,0,-1,base,penangle).

"i"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`i,x8,x8,0,2/5[mid,tp]);
x20=x21=x22=x23=x8;
y20=mid-srad; y21=base+srad; y23= 2/5 [mid,tp]; y22-y23= 3/5 penwidth*ppp;
draw 20..21;
call lserif(20,0,1,mid,penangle);
call lserif(21,0,-1,base,penangle);
draw 22..23.
"j"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`j,x2,x2,depth,2/5[mid,tp]);
x40=x4; x60=x6; x80=x8;
y40=sharp[y2,y4]+bt-base;
y6-y60= y8-y80=base-bt;
x21=x22=x23=x4; y21=mid-srad; y23=2/5[mid,tp]; y22-y23=3/5 penwidth*ppp;
draw 22..23;
draw 21..40{0,-1}..60{-1,0}..80{-twox,-twoy};
call lserif(21,0,1,mid,penangle).

"k"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);


% 20 top
% 21 lower-left
% 22, 23: where the four lines intersect; 23 is slightly to the right
% of 22.
% 24, upper right
% 25, lower right

x20=x21=x22=x8;
y20=tp-srad; y21=base+ssrad; y22=1/2[base,mid];

lft1x23=rt1x22; y23=y22;
y24=mid-3/2srad; y25=base+sssrad;
x24+srad=x2; lft1x25=x24;
call charbegin(`k,x8,x24,0,y2);

draw 20..21;
call lserif(20,0,1,tp,penangle);
call lserif(21,0,-1,base,penangle);
draw 24..23; draw 23..25;
call lserif(24,x24-x23,y24-y23,mid,penangle);
call lserif(25,x25-x23,y25-y23,base,penangle).
"l"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`l,x8,x8,0,tp);
x20=x21=x8;
y20=tp-srad; y21=base+srad;
draw 20..21;
call lserif(20,0,1,tp,penangle);
call lserif(21,0,-1,base,penangle).
"m"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`m,x8,2x4-x8,0,y2);
x30=x2; y30=sharp[x4,x2];
x90=x8; y90=sharp[y8,y10];
x120-x12=x2-x10=x300-x30;
y120=mid; y300=y30;

%point 20 is the top left point; points 40,41, and 42 are the bottoms
% of the stems.

x20=x40=x10; y20=mid-srad; y40=base+srad=y41=y42;
x41=x4; x42=x300;
draw 20..40;
draw 30..41;
draw 300..42;
call lserif(20,0,1,mid,penangle);
call lserif(40,0,-1,base,penangle);
call lserif(41,0,-1,base,penangle);
call lserif(42,0,-1,base,penangle);
if style = italic: draw 90{0,1}..12{1,0}..30{0,-1};
		   draw 30{0,1}..120{1,0}..300{0,-1};
  else: draw 10{tenx,teny}..12{1,0}..30{0,-1};
	draw 2{twox,twoy}..120{1,0}..300{0,-1};
  fi.
"n"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`n,x8,x4,0,y2);
x30=x2; y30=sharp[y4,y2];
x90=x8; y90=sharp[y8,y10];
x20=x40=x10; y20=mid-srad; y40=base+srad=y41;
x41=x4; 
draw 20..40;
draw 30..41;
call lserif(20,0,1,mid,penangle);
call lserif(40,0,-1,base,penangle);
call lserif(41,0,-1,base,penangle);
if style = italic: draw 90{0,1}..12{1,0}..30{0,-1};
   else: draw 10{tenx,teny}..12{1,0}..30{0,-1};
fi.

"o"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`o,x9,x3,0,y3+icx);
draw 10{tenx,teny}..12{1,0}..2{twox,twoy}..3{0,-1}..4{-tenx,-teny}..
	6{-1,0}..8{-twox,-twoy}..9{0,1}..10{tenx,teny}.
"p"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`p,x10,x3,depth,y3+icx);
x20=x21=x8;
y20=mid-srad; y21=bt+srad;
draw 20..21;
call lserif(20,0,1,mid,penangle);
call lserif(21,0,-1,bt,penangle);
draw 10{tenx,teny}..12{1,0}..2{twox,twoy}..3{0,-1}..4{-tenx,-teny}..
	6{-1,0}..8{-twox,-twoy}.
"q"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`q,x9,x2,depth,y2);
x30=x2; y30=sharp[y4,y2];
x20=x4;
y20=bt+srad;
draw 30..20;
call lserif(20,0,-1,bt,penangle);
draw 4{-tenx,-teny}..6{-1,0}..8{-twox,-twoy}..9{0,1}..10{tenx,teny}..
	12{1,0}..30{0,-1}.

"r"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`r,x8,x12,0,y2);
x20=x21=x8;
y20=mid-srad; y21=base+srad;
draw 20..21;
call lserif(20,0,1,mid,penangle);
call lserif(21,0,-1,base,penangle);
draw 10{tenx,teny}..12{1,0}..2{twox,twoy}.
"s"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`s,x8,x4,0,y2);
x20=1/2[x8,x2]; y20=1/2[y8,y2];
draw 2{-twox,-twoy}..12{-1,0}..10{0,-1}..20{1,-.2}..4{0,-1}..6{-1,0}..
	8{-twox,-twoy}.
"t"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`t, x8,x4,0,y2);
x90=x8; y90=sharp[y10,y8];
y20=4/3[base,mid];
x20=x10;
y21=y22=mid;
rt1x21=x9; rt1x22=x2;
x24=x4; y24=1/2[base,y4];
draw 21..22;
draw 20..90{0,-1}..6{1,0}..24{tenx,teny/2}.
"u"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`u,x8,x4,0,y2);
x90=x8; y90=sharp[y10,y8];
y20=y22=mid-srad; y23=base+srad; x20=x8; x22=x23=x4;
draw 20..90{0,-1}..6{1,0}..4{tenx,teny};
draw 22..23;
call lserif(20,0,1,mid,penangle);
call lserif(22,0,1,mid,penangle);
call lserif(23,0,-1,base,penangle).
"v"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`v,x8,x4,0,mid);
y20=mid-ssrad; y22=mid-srad;
y21=base;
x20=x8; x22=x4;
x21= 1/2[x20,x22];
call lserif(20,x20-x21,y20-y21,mid,penangle);
draw 20..21;
draw 21..22;
call lserif(22,x22-x21,y22-y21,mid,penangle).
"w"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);


y20=y22=mid-ssrad; y24=mid-srad;
y21=y23=base;
x20=x8; x22=x4; x24=2[x20,x22];
x21= 1/3[x20,x22]; x23-x21=x4-x8;
call charbegin(`w,x8,x24,0,mid);
call lserif(20,x20-x21,y20-y21,mid,penangle);
draw 20..21;
draw 21..22;
draw 22..23;
draw 23..24;
call lserif(22,x22-x23,y22-y23,mid,penangle);
call lserif(24,x22-x21,y22-y21,mid,penangle).
"x"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`x,x8,x4,0,mid+icx);
x20=x21=x8+ssrad; x22=x23=x4-ssrad;
y20=y22=mid-ssrad; y21=y23=base+ssrad;
draw 20..23; draw 21..22;
call lserif(23,x23-x20,y23-y20,base,penangle);
call lserif(20,x20-x23,y20-y23,mid,penangle);
call rserif(22,x22-x21,y22-y21,mid,penangle);
call rserif(21,x21-x22,y21-y22,base,penangle).
"y"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`y,x8,x4,depth,mid);
x40=x4; x60=x6; x80=x8;
y40=sharp[y2,y4]+bt-base;
y6-y60= y8-y80=base-bt;
x21=x8; y21=mid-srad; x22=x4; y22=mid-srad;
x23=x4; y23=sharp[y2,y4];
x90=x8; y90=sharp[y10,y8];
draw 21{0,-1}..90{0,-1}..6{1,0}..23{0,1};
draw 22{0,-1}..40{0,-1}..60{-1,0}..80{-twox,-twoy};
call lserif(21,0,1,mid,penangle);
call lserif(22,0,1,mid,penangle).
"z"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`z,x11,x1,0,mid);
if expen=0: call setpen(45); else: call steepen; fi;
x20=x11+footsize*ppp; y20=mid;		% upper left
x21=x5-footsize*ppp;  y21=base;		% lower right
draw 20..1;
draw 7..21;
call lfoot(20);
call rfoot(21);
if expen=0: call setpen(30); else: call flatpen; fi;
draw 1..7;
if expen=0: call setpen(penangle); else: call normpen; fi.
"."; call charbegin(`., 0, rt1rt1 0, 0, 0);
lft1x0=0; y0=base;
x1=x0; y1-y0=3/5 penwidth ppp;
draw 0..1.
","; call charbegin(`,, 0, penwidth ppp, 1/2 depth, 0);
lft1x0=0; y0=1/2[base,bt];
rt1x1=penwidth ppp; y1=1/4[base,bt];
x2= penwidth ppp/2; y2=base;
draw 2{x1-x2,1/2 (y1-y2)}..1{0,-1}..0{x0-x1,1/2 (y0-y1)}.
"'"; call charbegin(`', 0, penwidth ppp - space, 1/2 depth, mid);
incy mid-base+1/2(base-bt);
lft1x0=0; y0=1/2[base,bt];
rt1x1=penwidth ppp; y1=1/4[base,bt];
x2= penwidth ppp/2; y2=base;
draw 2{x1-x2,1/2 (y1-y2)}..1{0,-1}..0{x0-x1,1/2 (y0-y1)};
incy 0.
";"; call charbegin(`;, 0, penwidth ppp - space, 1/2 depth, mid);
lft1x0=0; y0=1/2[base,bt];
rt1x1=penwidth ppp; y1=1/4[base,bt];
x2= penwidth ppp/2; y2=base;
draw 2{x1-x2,1/2 (y1-y2)}..1{0,-1}..0{x0-x1,1/2 (y0-y1)};
x3=x2; y3=7/10[base,mid];
x4=x3; y4=y3 + 3/5 penwidth ppp;
draw 3..4.
"!"; call charbegin(`!, 0, 0, 0, tp);
x1=x2=x3=x4= 0;
y1=tp; y2=y3+penwidth ppp; y4=base; y3=y4+ 3/5 penwidth ppp;
draw 1..2; draw 3..4.

"∞: lightning !";
trxy 0;
if expen=0: call setpen(30); else: call flatpen; fi;
y1=tp; y2=y3+5/4 penwidth ppp; y4=base; y3=y4+ 3/5 penwidth ppp;
top1top1 y5= .5[y1,y2];
bot1bot1 y6= .5[y1,y2];
rt1rt1rt1x5=0; lft1lft1lft1 x6=0;
lft1lft1x1=0; rt1rt1 x2=0; call collinear(3,2,6); call collinear(4,3,2);
call charbegin(`∞, x5, x6, 0, tp);
draw 1..5..5..6..6..2; draw 3..4;
trxy slant;
if expen=0: call setpen(penangle); else: call normpen; fi.

"-";
x0=0; y0=1/2[base,mid];		% left
x1=nwidth*owidth*ppp; y1=y0;	% right
call charbegin(`-,lft1x0+space,rt1x1-space,0,y0);
draw 0..1.
":"; call charbegin(`:, 0, rt1rt1 0, 0, mid);
lft1x0=0; y0=base;
x1=x0; y1-y0=3/5 penwidth ppp;
draw 0..1;
x2=x3=x0; y2=7/10[base,mid]; y3=y2+3/5 penwidth * ppp;
draw 2..3.
% reset the circle so that it corresponds to the upper-case O.
call setcircle(left,cap*(owidth/oheight),cap,base);

"C";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`C,x9,x2,0,1/2[y2,cap]);
x20=x2; y20=1/2[y2,cap];	% upper right
x21=x4; y21=1/2[y4,base];	% lower right
draw 20{-twox, -twoy/2}..12{-1,0}..10{-tenx,-teny}..9{0,-1}..
	8{twox,twoy}..6{1,0}..21{tenx,teny/2}.
"O";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`O,x9,x3,0,y3+icx);
draw 2{twox,twoy}..3{0,-1}..4{-tenx,-teny}..6{-1,0}..
	8{-twox,-twoy}..9{0,1}..10{tenx,teny}..12{1,0}..2{twox,twoy}.
"Q";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`Q,x9,x3,0,y3+icx);
draw 2{twox,twoy}..3{0,-1}..4{-tenx,-teny}..6{-1,0}..
	8{-twox,-twoy}..9{0,1}..10{tenx,teny}..12{1,0}..2{twox,twoy};
x20=2/3[x6,x4]; y20=1/2[y6,y4];	% midpoint of tongue
if expen=0: call setpen(25); else: call flatpen; fi;
if style = italic: qslope = 1.4; else: qslope = 1; fi;
call lserif(20,-1,qslope,y4,0);	% left half of tongue
call lserif(20,1,-qslope,base,0);	% right half of tongue.
if expen=0: call setpen(penangle); else: call normpen; fi.	% reset the pen
"G";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`G,x9,x2,0,1/2[y2,cap]);
x20=x2; y20=1/2[y2,cap];	% upper right
x21=x4; y21=1/2[y4,base];	% lower right
draw 20{-twox, -twoy/2}..12{-1,0}..10{-tenx,-teny}..9{0,-1}..
	8{twox,twoy}..6{1,0}..21{tenx,teny/2};
x22=x20; y22=1/2[y20,y21];	% right center
draw 22..21;			% stem
call lfoot(22);			% bar, except for sans-serif style
if footsize=0:
	y23=y22;
	x23=4/5[x9,x22];	% bar, sans-serif
	draw 22..23;
fi.
% italic S
if style=italic:
"S"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);

call charbegin(`S,x8,x4,0,y2);
x20=1/2[x8,x2]; y20=1/2[y8,y2];
draw 2{-twox,-twoy}..12{-1,0}..10{0,-1}..20{1,-.2}..4{0,-1}..6{-1,0}..
	8{-twox,-twoy};
fi.
"D";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`D,x10,x3,0,y3+icx);
draw	11..7;			% upright
draw 11{1,0}
	..2{twox,twoy}
	..3{0,-1}		% curve
	..4{-tenx,-teny}
	..6{-1,0}
	..7;
call lfoot(11).			% top serif
"A";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`A,x8,x4,0,0);
call collinear(20,7,12); y20=base+2srad;	% bottom left
call collinear(21,5,12); y21=base+srad;		% bottom right
call collinear(22,7,12); y22=2/5[base,cap];	% crossbar left
call collinear(23,5,12); y23=y22;		% crossbar right
draw 20..12..12..21;				% tent
draw 22..23;					% crossbar
call lserif(21,x21-x12,y21-y12,base,penangle);	% right serif
call lfoot(12);					% top serif
if style = italic:				% left serif
	call rserif(20,x20-x12,y20-y12,base,20);
else:	draw 20..7; call rfoot(7);
fi.

"H";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`H,x10,x2,0,cap);
draw 11..7;	% left upright
draw 1..5;	% right upright
x20= x11; y20=1/2[y6,y12];	% bar left
x21= x1; y21=y20;	% bar right
draw 20..21;
call lfoot(11); call lfoot(1);
call rfoot(7); call rfoot(5).

% old-style H:
% "H";
% call circle(1,2,3,4,5,6,7,8,9,10,11,12);
% call charbegin(`H,x10,x2,0,cap);
% x20=x11; y20=cap-srad;	% upper left
% x21=x20; y21=base+srad;	% lower left
% x22=x1;  y22=cap-srad;	% upper right
% x23=x1;  y23=base+srad; % lower right;
% x24=x10; y24=1/2[base,cap];	% left bar
% x25=x2;  y25=y24;		% right bar
% draw 20..21;	% left upright
% draw 22..23;	% right upright
% draw 24..25;	% bar
% call lfoot(20);	% serif at upper left
% call rfoot(23); % serif at lower right
% call rserif(21,0,-1,base,45);	% serif at lower left
% call rserif(22,0,1,cap,45).	% serif at upper right
% 
"V";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`V,x11,x1,0,cap);
call collinear(20,11,6); y20=cap-ssrad;		% upper left
call collinear(21,1,6);  y21=y20;		% upper right
draw 20..6..6..21;				% V
call lserif(20,x20-x6,y20-y6,cap,penangle);	% left serif
call lserif(21,x21-x6,y21-y6,cap,penangle).	% right serif
"N";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`N,x10,x2,0,cap);
x20=x7; y20=base+2srad;		% lower left
draw 20..11..11..5..5..1;	% N
call lfoot(11);			% serif at upper left
call lfoot(1);			% serif at upper right
if style = italic:		% serif at lower left
	call rserif(20,0,-1,base,20);
else: draw 20..7; call rfoot(7);
fi.

"T"; 
x1=0; y1=cap;				% top left
x3=x1+cap owidth / oheight; y3=cap;	% top right
x2=1/2[x1,x3]; y2=cap;			% top middle
x4=x2; y4=base;				% bottom
call charbegin(`T,x1,x3,0,cap);
draw 1..3;				% bar
draw 2..4;				% upright
call rfoot(4).				% bottom serif

% The circle is not used because it would give too much slant
% to the upright of the italic T.
"X";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`X,x11,x1,0,cap);
x20=x11+2srad; y20=cap-srad;	% upper left
x21=x11+srad;      y21=base+srad;	% lower left
x22=x1-srad;  y22=cap-srad;	% upper right
x23=x1-2srad;       y23=base+srad;    % lower right;
draw 20..23; draw 21..22;	% X
call lserif(20,x20-x23,y20-y23,cap,penangle);	% top left serif
call lserif(23,x23-x20,y23-y20,base,penangle);	% bottom right serif
call rserif(21,x21-x22,y21-y22,base,penangle);	% bottom left serif
call rserif(22,x22-x21,y22-y21,cap,penangle).	% top right serif
"Y";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`Y,x11,x1,0,cap);
x20=x11+2srad; y20=cap-srad;	% upper left
x22=x1-srad;  y22=cap-srad;	% upper right
x21=x12; y21=1/2[base,cap];	% center
x23=x21; y23=base;		% bottom
draw 20..21..21..22;		% V
draw 21..23;			% stem
call lserif(20,x20-x21,y20-y21,cap,penangle);	% top left serif
call lserif(22,x22-x21,y22-y21,cap,penangle);	% top right serif
call rfoot(23).					% bottom serif
"Z"; call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`Z,x11,x1,0,cap);
if expen=0: call setpen(45); else: call steepen; fi;
x20=x11+footsize*ppp; y20=cap;		% upper left
x21=x5-footsize*ppp;  y21=base;		% lower right
draw 20..1;
draw 7..21;
call lfoot(20);
call rfoot(21);
if expen=0: call setpen(30); else: call flatpen; fi;
draw 1..7;
if expen=0: call setpen(penangle); else: call normpen; fi.

"U";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`U,x11,x1,0,y1);
x20=x5; y20=base+srad;		% bottom right
x21=x11; y21=sharp[y10,y8];	% middle left
draw 11 .. 21{0,-1}
	.. 6{1,0}		% left upright and cup
	.. 4{tenx,teny};
draw 1..20;			% right upright
call lfoot(11);			% serif at upper left
call lfoot(1);			% serif at upper right
call lserif(20,0,-1,base,penangle).	% serif at lower right

"M";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`M,x9,x3,0,cap);
x20=x9; y20=base;				% bottom left, roman
x21=x3; y21=base+srad;				% bottom right
call collinear(22,20,11); y22=base+2srad;	% bottom left, italic

draw 22..11..11..6..6..1..1..21;		% M
call lserif(21,x21-x1,y21-y1,base,penangle);	% bottom right serif
call lfoot(11);					% top left serif
if style=italic:				% bottom left serif
	call rserif(22,x22-x11,y22-y11,base,20);
else:	draw 20..22; call rfoot(20);
fi.
"W";
call circle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`W,x11,2[x11,x1],0,cap);

call collinear(20,11,6); y20=cap-ssrad;		% top left
call collinear(21,1,6);  y21=y20;		% top middle
y22 = y20; x22=2[x20,x21];			% top right
y23 = y6; x23 = x6 + x21-x20;			% lower right
draw 20..6..6..21..21..23..23..22;		% W
call lserif(20,x20-x6,y20-y6,cap,penangle);	% top left serif
call lserif(21,x20-x6,y20-y6,cap,penangle);	% top middle serif
call lserif(22,x22-x23,y22-y23,cap,penangle).	% top right serif
"I";
call charbegin(`I,0,0,0,cap);
x20=0; y20=cap;		% top
x21=0; y21=base;	% bottom
draw 20..21;		% I
call lfoot(20);		% top serif
call rfoot(21).		% bottom serif
% The remaining capital letters require two circles, each half-size,
% one on top of the other. The top circle is 5/11 the total height,
% the bottom is 6/11. 

subroutine topcircle(index a, index b, index c, index d,
		     index e, index f, index g, index h,
		     index i, index j, index k, index l):
no proofmode;
call setcircle(left,5/11[left,cap*oheight/owidth],cap,6/11[base,cap]);
call circle(a,b,c,d,e,f,g,h,i,j,k,l).

subroutine botcircle(index a, index b, index c, index d,
		     index e, index f, index g, index h,
		     index i, index j, index k, index l):
no proofmode;
call setcircle(left,6/11[left,cap*oheight/owidth],6/11[base,cap],base);
call circle(a,b,c,d,e,f,g,h,i,j,k,l).

% The S requires that the top circle have its center directly above
% the center of the lower one:

subroutine stopcircle(index a, index b, index c, index d,
		     index e, index f, index g, index h,
		     index i, index j, index k, index l):
no proofmode;
call setcircle(1/11[left,cap*oheight/owidth],
	       13/22[left,cap*oheight/owidth],cap,6/11[base,cap]);
call circle(a,b,c,d,e,f,g,h,i,j,k,l).

"B"; 
call topcircle(1,2,3,4,5,6,7,8,9,10,11,12);
call botcircle(101,102,103,104,105,106,107,108,109,110,111,112);
call charbegin(`B,x10,x103,0,y3+icx);
x20=x10; y20=y6;	% left middle;
x21=x10; y21=base;	% left bottom;
draw 11..21;		% upright
			% upper and lower loops:
draw 11{1,0}..2{twox,twoy}..3{0,-1}..4{-tenx,-teny}..6{-1,0}..20;
draw 20{1,0}..102{twox,twoy}..103{0,-1}..104{-tenx,-teny}..
	106{-1,0}..21;
call lfoot(11).		% serif at upper left.

"P";
call topcircle(1,2,3,4,5,6,7,8,9,10,11,12);
call botcircle(101,102,103,104,105,106,107,108,109,110,111,112);
call charbegin(`P,x11,x3,0,y3+icx);
x20=x11; y20=base;	% lower left
draw 11..20;		% upright
draw 11{1,0}
	..2{twox,twoy}
	..3{0,-1}	% curve
	..4{-tenx,-teny}
	..6{-1,0}
	..7;
call rfoot(20);		% serif at bottom
call lfoot(11).		% serif at top
"R";
call topcircle(1,2,3,4,5,6,7,8,9,10,11,12);
call botcircle(101,102,103,104,105,106,107,108,109,110,111,112);
call charbegin(`R,x11,x3,0,y9+icx);
x20=x11; y20=base;	% lower left
draw 11..20;		% upright
draw 11{1,0}
	..2{twox,twoy}
	..3{0,-1}	% curve
	..4{-tenx,-teny}
	..6{-1,0}
	..7;
call rfoot(20);		% serif at bottom left
call lfoot(11);		% serif at top

y21=base+srad/2; x21=x103-srad;	% bottom right
draw 6..21;			% lower right stroke
call lserif(21,x21-x6,y21-y6,base,penangle).	% lower right serif
"E";
call topcircle(1,2,3,4,5,6,7,8,9,10,11,12);
call botcircle(101,102,103,104,105,106,107,108,109,110,111,112);
call charbegin(`E,x11,x3,0,cap);
x20=x11; y20=y6;	% middle left
x21=x11; y21=base;	% bottom left
x22=x3; y22=cap;	% top right
x23=x3; y23=y6;		% middle right
x24=x103; y24=base;	% bottom right
draw 11..21;		% upright
draw 11..22;		% top stroke
draw 20..23;		% middle stroke
draw 21..24;		% bottom stroke
call lfoot(11).		% top left serif
"F";
call topcircle(1,2,3,4,5,6,7,8,9,10,11,12);
call botcircle(101,102,103,104,105,106,107,108,109,110,111,112);
call charbegin(`F,x11,x3,0,cap);
x20=x11; y20=y6;	% middle left
x21=x11; y21=base;	% bottom left
x22=x3; y22=cap;	% top right
x23=x3; y23=y6;		% middle right
draw 11..21;		% upright
draw 11..22;		% top stroke
draw 20..23;		% middle stroke
call lfoot(11);		% top left serif
call rfoot(21).		% bottom serif

"L";
call topcircle(1,2,3,4,5,6,7,8,9,10,11,12);
call botcircle(101,102,103,104,105,106,107,108,109,110,111,112);
call charbegin(`L,x11,x103,0,0);
x20=x11; y20=base;	% bottom left
x21=x103; y21=base;	% bottom right
draw 11..20..20..21;	% L
call lfoot(11).		% top serif
"K";
call topcircle(1,2,3,4,5,6,7,8,9,10,11,12);
call botcircle(101,102,103,104,105,106,107,108,109,110,111,112);
call charbegin(`K,x11,x3,0,cap);
x20=x11; y20=base;			% bottom left
lft1x21=rt1x11; y21=y6;			% middle left
if style=italic: kfix=2;
	else:	 kfix=1; fi;		% correction factor
x22+srad=x3; y22+srad=y12;
x23+kfix srad=rt1rt1x3; y23-srad/2=base;	% lower right
draw 11..20; draw 22..21..21..23;	% K
call lfoot(11);				% top left serif
call rfoot(20);				% bottom left serif
call lserif(22,x22-x21,y22-y21,y12,penangle);	% upper right serif
call lserif(23,x23-x21,y23-y21,base,penangle).	% lower right serif
"J";
call topcircle(1,2,3,4,5,6,7,8,9,10,11,12);
call botcircle(101,102,103,104,105,106,107,108,109,110,111,112);
call charbegin(`J,x108,x104,0,cap);
x21=x104; y21=cap;			% upper right
x22=x21; y22=sharp[y102,y104];		% low on right
draw 21 ..22{0,-1}
	..106{-1,0}			% J
	..108{-twox,-twoy/2};
call lfoot(21).				% serif at top


"?"; call topcircle(1,2,3,4,5,6,7,8,9,10,11,12);
call charbegin(`?, x9,x3,0,y3+icx);
x20=x6; y20=base;				% bottom of dot
x21=x20; y21=y20+3/5 penwidth ppp;		% top of dot
x22=x21; y22=y21+ penwidth ppp;		% bottom of hook;
draw 10{tenx,teny}..12{1,0}..2{twox,twoy}
	..3{0,-1}..4{-tenx,-teny}..22{0,-1};
draw 20..21.
% roman S
if style = roman:
"S"; call stopcircle(1,2,3,4,5,6,7,8,9,10,11,12);
     call botcircle(101,102,103,104,105,106,107,108,109,110,111,112);
call charbegin(`S, x9,x3,0,y2);
draw 2{-twox,-twoy}
	..12{-1,0}
	..10{-tenx,-teny}
	..9{0,-1}
	..6{1,-.3}
	..103{0,-1}
	..104{-tenx,-teny}
	..106{-1,0}
	..108{-twox,-twoy};
fi.

end